﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Net;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Xml;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace MyVideoTek
{
    class ApiAllocine
    {
        //Attributs
        private string titreFilm;
        private Movie unFilm;
        private Image uneImage;


        public bool GetIdFilmByName(string unFilm)
        {
            //Variables
            string codeFilm = null;
            bool result = true;
            JObject fichierJson = null;

            if (unFilm[unFilm.Length - 1] == ' ')
            {
                unFilm.Remove(unFilm.Length - 1, 1);

            }
            titreFilm = unFilm;

            string nomfilm = unFilm.Replace(" ", "%20");

            //Tente de récupérer un code de film
            try
            {
                string resultSearchXml = Web.GexXml("http://api.allocine.fr/xml/search?q=" + nomfilm + "&partner=1&profile=small&json=1");

                //Si le fichier de resultat n'est pas vide
                if (resultSearchXml != null | resultSearchXml != "")
                {
                    //Recupère le film
                    fichierJson = JObject.Parse(resultSearchXml);

                    //Quand aucun film n'à été trouvé, la chaine de retour fait 25 caractère
                    //Méthode "caca" à modifier
                    if (fichierJson["feed"].ToString().Length > 25)
                    {
                        try
                        {
                            //Création / récupération du code
                            Search.CreateSearchFilm monCode = new Search.CreateSearchFilm(fichierJson);
                            Search.Movie leFilm = monCode.Feed.Movie.ElementAt(0);

                            //Code du film
                            codeFilm = leFilm.Code.ToString();
                        }
                        catch (Exception ex)
                        {
                            result = false;
                        }
                    }


                }
            } //Erreur
            catch (WebException ex) {
                MessageBox.Show(ex.ToString());
            }

            if (codeFilm == null || result == false) {
                return false;
            }
            else {
                //Retourne les infos du films
                GetInfoFilmByName(codeFilm, nomfilm);
                return true;
            }
        }

        public void GetInfoFilmByName(string idFilm, string nomfilm)
        {           
            try
            {
                //Requete de récupération du fihcier JSON
                string resultSearchXml = Web.GexXml("http://api.allocine.fr/xml/movie?code=" + idFilm + "&partner=1&profile=medium&json=1");

                //Création d'un Film
                JObject filmJson = JObject.Parse(resultSearchXml);
                CreateMovie CreateFilm = new CreateMovie(filmJson);
                this.UnFilm = CreateFilm.Movie;

                if (this.unFilm.Poster != null)
                {
                    uneImage = new Image(this.unFilm.Poster.Href, "images/" + unFilm.Code.ToString() + ".jpg");
                }

              

                //Recupère les affiches des films
               // DownloadPicture(this.unFilm.Poster.Href, "images/" + unFilm.Code.ToString() + ".jpg");
            }

            //Une erreur s'est produite
            catch (WebException ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }


        private void DownloadPicture(string urlImage, string fileName)
        {
            //Si l'image n'à pas déjà été téléchargé
            if (!File.Exists(fileName))
            {
                /*
                try
                {
                    WebClient client = new WebClient();
                    // Starts the download
                    client.DownloadFileAsync(new Uri(urlImage), fileName);
                    //Libère la mémoire
                    client.Dispose();
                }
                catch (WebException ex)
                {
                    //do some error handling stuff
                    MessageBox.Show(ex.ToString());
                }
                 * */



            }
        }





        #region Accesseurs
 
        public string TitreFilm
        {
            get { return titreFilm; }
        }
        public Movie UnFilm
        {
            get { return this.unFilm; }
            set { this.unFilm = value; }
        }

        public Image UneImage
        {
            get { return this.uneImage; }
        }

        #endregion
    }
}
